#include "human_detect.h"
#include <stdio.h>
#include "los_task.h"
#include "iot_gpio.h"
#include "iot_errno.h"

volatile uint8_t g_human_detected = 0;

// GPIO中断回调函数
static void gpio_isr_func(char *arg) {
    (void)arg;
    g_human_detected = 1;
}

void human_check_task(void *arg)
{
    (void)arg;
    
    // 初始化GPIO（使用GPIO0_PA6作为人体检测输入）
    if (IoTGpioInit(GPIO0_PA6) != IOT_SUCCESS) {
        printf("GPIO init failed!\n");
        return;
    }
    
    if (IoTGpioSetDir(GPIO0_PA6, IOT_GPIO_DIR_IN) != IOT_SUCCESS) {
        printf("Set GPIO direction failed!\n");
        return;
    }

    // 使用正确的GPIO中断常量（根据实际SDK版本调整）
    #ifdef IOT_GPIO_EDGE_FALL
        #define EDGE_TYPE IOT_GPIO_EDGE_FALL
    #elif defined(IOT_GPIO_EDGE_FALLING)
        #define EDGE_TYPE IOT_GPIO_EDGE_FALLING
    #else
        #define EDGE_TYPE 1  // 大多数平台1表示下降沿
    #endif

    if (IoTGpioRegisterIsrFunc(GPIO0_PA6, 
                              IOT_INT_TYPE_EDGE,  // 或使用 1 表示边沿触发
                              EDGE_TYPE,
                              gpio_isr_func, 
                              NULL) != IOT_SUCCESS) {
        printf("Register GPIO ISR failed!\n");
    }

    while (1) {
        printf("Human detected: %d\n", g_human_detected);
        LOS_Msleep(1000);
        
        if (g_human_detected) {
            g_human_detected = 0;  // 清除标志
        }
    }
}
